package com.flyiu.data.idempotent.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.flyiu.data.idempotent.handler.IdempotentHandler;

/**
 * 
 * <p>幂等方法不能包含代理对象，使用hibernate特别注意封装对象的处理
 * </p>
 *
 * @author flyiu@flyiu.com
 * @version $Id: Idempotent.java, v 0.1 2018年6月30日 上午11:19:19 flyiu Exp $
 */
@Target({ElementType.METHOD,ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Idempotent {
	/**
	 * 幂等名称
	 * 
	 * @return
	 */
	String name() default "";

	@SuppressWarnings("rawtypes")
	Class<? extends IdempotentHandler>[] idempotentHandler() default IdempotentHandler.class;

	int paramIndex() default 0;

	/**
	 * 幂等KEY，设置幂等KEY请注意是一次请求的KEY，不建议使用带有业务意义的信息做为KEY
	 * 
	 * @return
	 */
	String[] idempotentKey() default {};
	
	String[] businessIdKey() default {};
	
	
}
